/**
 * 部门接口。
 */
var express = require("express");
var router = express.Router();
var Departments = require("../../../../models/Departments.ts");
var _ = require("lodash");
var encrypt = require("../../enoadEncrypt");
var decrypt = require("../../enoadDecrypt");

/**
 * 新录入部门
 */
//@Api(name="/rest/depart/create")
router.post("/depart/create", (req, res) => {
  let user = req.session.user;
  let dataBaseName = user.company.companyCap + "_service";
  const body = req.body;
  var depart = new Departments({
    departName: body.departName, //部门名称
    departId: body.departId,
    departParentId: body.departParentId, //上级部门id
    departCreateTime: body.departCreateTime || new Date().getTime(), //创建时间，时间戳
    departCreateBy:
      body.departCreateBy || JSON.stringify({ id: user._id, name: user.name }), //创建人，{id,name}
    departUpdateTime: body.departUpdateTime || new Date().getTime(), //更新时间，时间戳
    departUpdateBy:
      body.departUpdateBy || JSON.stringify({ id: user._id, name: user.name }), //更新人，{id,name}
    departRoleId: body.departRoleId, //部门权限 {};
  });

  //可以有重复的部门
  depart.save(dataBaseName,function (err, user) {
    if (err) {
      res.send({
        code: 201, // 0 表示处理成功，1 表示处理失败
        msg: "服务器错误，请联系管理员", // 状态的描述
        data: null, // 需要响应给客户端的数据
      });
    }
    res.send({
      code: 200, // 0 表示处理成功，1 表示处理失败
      msg: "部门创建成功", // 状态的描述
      data: user, // 需要响应给客户端的数据
    });
  });
});

//@Api(name="/rest/depart/update")
router.post("/depart/update", (req, res) => {
  let user = req.session.user;
  let dataBaseName = user.company.companyCap + "_service";
  const body = req.body;
  const id = body._id;
  var depart = new Departments({
    departName: body.departName, //部门名称
    departId: body.departId,
    departParentId: body.departParentId, //上级部门id，如果没有选择上级部门，那么默认最大部门。
    departCreateTime: body.departCreateTime || new Date().getTime(), //创建时间，时间戳
    departCreateBy:
      body.departCreateBy || JSON.stringify({ id: user._id, name: user.name }), //创建人，{id,name}
    departUpdateTime: body.departUpdateTime || new Date().getTime(), //更新时间，时间戳
    departUpdateBy:
      body.departUpdateBy || JSON.stringify({ id: user._id, name: user.name }), //更新人，{id,name}
    departRoleId: body.departRoleId, //部门权限;
  });

  //检查用户名是否已经存在
  Departments.update(id, depart,dataBaseName, function (err, newDep) {
    if (err) {
      res.send({
        code: 201, // 0 表示处理成功，1 表示处理失败
        msg: "服务器错误，请联系管理员", // 状态的描述
        data: null, // 需要响应给客户端的数据
      });
    } else {
      res.send({
        code: 200, // 0 表示处理成功，1 表示处理失败
        msg: "更新成功", // 状态的描述
        data: newDep, // 需要响应给客户端的数据
      });
    }
  });
});

//@Api(name="/rest/depart/delete")
router.post("/depart/delete", (req, res) => {
  let user = req.session.user;
  let dataBaseName = user.company.companyCap + "_service";
  const body = req.body;
  const ids = body.ids || []; //获取需要删除的id组。
  let allPromise = [];
  _.forEach(ids, (id) => {
    allPromise.push(
      new Promise((resolve, reject) => {
        Departments.deleteById(id,dataBaseName, (err) => {
          if (err) {
            resolve({ id, status: false });
          } else {
            resolve({ id, status: true });
          }
        });
      })
    );
  });
  Promise.all(allPromise).then((allStaus) => {
    let data = [];
    _.forEach(allStaus, (item) => {
      data.push({
        id: item.id,
        msg: item.status ? "删除成功" : "删除失败",
      });
    });
    res.send({
      code: 200, // 0 表示处理成功，1 表示处理失败
      msg: "操作完成", // 状态的描述
      data,
    });
  });
});

//获取用户所有数据。
//@Api(name="/rest/depart/fetchAllDeparts")
router.post("/depart/fetchAllDeparts", (req, res) => {
  let user = req.session.user;
  let dataBaseName = user.company.companyCap + "_service";
  Departments.getAllDeparts(dataBaseName,(err, all) => {
    if (err) {
      res.send({
        code: 201,
        msg: "服务器错误，请联系管理员",
        data: null,
      });
    } else {
      res.send({
        code: 200,
        msg: "查询成功",
        data: all,
      });
    }
  });
});

module.exports = router;
